/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Formulario_venda.java
 *
 * Created on 11/06/2011, 14:51:22
 */

package formularios;

import formularios.model.Clientes;
import formularios.model.Empregados;
import formularios.model.Imoveis;
import formularios.model.Vendas;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author Ramon
 */
public class Formulario_venda extends javax.swing.JInternalFrame {

    /** Creates new form Formulario_venda */
    public Formulario_venda() {

        initComponents();
        //quando apertar enter, o botão salvar será acionado
        getRootPane().setDefaultButton(btn_venda_salvar);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lab_venda_cod = new javax.swing.JLabel();
        lab_venda_cod_vendedor = new javax.swing.JLabel();
        lab_venda_cpf_cli = new javax.swing.JLabel();
        lab_venda_cod_imovel = new javax.swing.JLabel();
        lab_venda_pagamento = new javax.swing.JLabel();
        txt_venda_cod = new javax.swing.JTextField();
        try {
            MaskFormatter formato_cpf = new MaskFormatter("###.###.###-##");
            txt_venda_cpf_vend = new JFormattedTextField(formato_cpf);
            try {
                MaskFormatter formato1_cpf = new MaskFormatter("###.###.###-##");
                txt_venda_cpf_cli = new JFormattedTextField(formato1_cpf);
                txt_venda_cod_imovel = new javax.swing.JTextField();
                cbo_venda_pagamento = new javax.swing.JComboBox();
                btn_venda_salvar = new javax.swing.JButton();
                btn_venda_limpar = new javax.swing.JButton();
                btn_venda_excluir = new javax.swing.JToggleButton();

                setClosable(true);
                setIconifiable(true);
                setMaximizable(true);
                setResizable(true);
                setTitle("Formulário de Venda");

                lab_venda_cod.setText("Código de venda");

                lab_venda_cod_vendedor.setText("CPF do vendedor");

                lab_venda_cpf_cli.setText("CPF do cliente");

                lab_venda_cod_imovel.setText("Código do imóvel");

                lab_venda_pagamento.setText("Forma de pagamento");

                txt_venda_cod.addFocusListener(new java.awt.event.FocusAdapter() {
                    public void focusLost(java.awt.event.FocusEvent evt) {
                        txt_venda_codFocusLost(evt);
                    }
                });

            } catch (ParseException ex) {
                Logger.getLogger(Formulario_cliente.class.getName()).log(Level.SEVERE, null, ex);
            }

        } catch (ParseException ex) {
            Logger.getLogger(Formulario_cliente.class.getName()).log(Level.SEVERE, null, ex);
        }

        cbo_venda_pagamento.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

        btn_venda_salvar.setText("Salvar");
        btn_venda_salvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_venda_salvarActionPerformed(evt);
            }
        });

        btn_venda_limpar.setText("Limpar");
        btn_venda_limpar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_venda_limparActionPerformed(evt);
            }
        });

        btn_venda_excluir.setText("Excluir");
        btn_venda_excluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_venda_excluirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lab_venda_cpf_cli)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(txt_venda_cpf_cli, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lab_venda_cod)
                            .addComponent(lab_venda_cod_vendedor))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(1, 1, 1)
                                .addComponent(txt_venda_cod, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txt_venda_cpf_vend, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)))))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btn_venda_salvar)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(btn_venda_excluir)
                            .addGap(26, 26, 26)
                            .addComponent(btn_venda_limpar)
                            .addContainerGap(37, Short.MAX_VALUE))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(lab_venda_pagamento)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(cbo_venda_pagamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(51, 51, 51)))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lab_venda_cod_imovel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(txt_venda_cod_imovel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(61, 61, 61))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lab_venda_cod)
                            .addComponent(txt_venda_cod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lab_venda_cod_vendedor)
                            .addComponent(txt_venda_cpf_vend, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lab_venda_cpf_cli)
                            .addComponent(txt_venda_cpf_cli, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lab_venda_cod_imovel)
                            .addComponent(txt_venda_cod_imovel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(lab_venda_pagamento)
                            .addComponent(cbo_venda_pagamento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btn_venda_salvar)
                    .addComponent(btn_venda_excluir)
                    .addComponent(btn_venda_limpar))
                .addContainerGap(38, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btn_venda_salvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_venda_salvarActionPerformed

        //cria uma instancia relacionada ao contexto de persistencia
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("BancoImobiliaria");
        EntityManager em = emf.createEntityManager();
        //cria uma instancia para controlar a transação
        EntityTransaction trans = em.getTransaction();

        //busca o imóvel que possui o código digitado
        Imoveis imovel = em.find(Imoveis.class, Integer.parseInt(txt_venda_cod_imovel.getText()));

        //mensagem caso não exista nenhum imóvel com o código digitado
        if(imovel == null)
        {
            JOptionPane.showMessageDialog(this, "Imóvel não encontrado.");
            return;
        }

        //busca a construtora que possui CNPJ digitado
        Empregados emp = em.find(Empregados.class, txt_venda_cpf_vend.getText());

        //mensagem caso não exista nenhum empregado com o CPF digitado
        if(emp == null)
        {
            JOptionPane.showMessageDialog(this, "Vendedor não encontrado.");
            return;
        }

        //busca o cliente que possui o CPF digitado
        Clientes cli = em.find(Clientes.class, txt_venda_cpf_cli.getText());

        //mensagem caso não exista nenhum cliente com o CPF digitado
        if(cli == null)
        {
            JOptionPane.showMessageDialog(this, "Cliente não encontrado.");
            return;
        }       

        //instancia da classe Vendas
        Vendas venda = new Vendas(Integer.parseInt(txt_venda_cod.getText()), emp, cli, imovel,
                                  String.valueOf(cbo_venda_pagamento.getSelectedItem()));

        try {
            //insere ou atualiza uma venda
            trans.begin();
            em.merge(venda);
            trans.commit();
            JOptionPane.showMessageDialog(this, "Venda cadastrada com sucesso.");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "Erro ao inserir. Por favor, confira os dados.");
        }

        //encerra a transação
        em.close();
        emf.close();
    }//GEN-LAST:event_btn_venda_salvarActionPerformed

    private void btn_venda_excluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_venda_excluirActionPerformed

        //verifica se existe algum código digitado
        if(txt_venda_cod.getText().equals("")) {
            JOptionPane.showMessageDialog(this, "Entre com o código da venda para excluí-la.");
            txt_venda_cod.requestFocus();
        }else
        {
            //cria gerenciador do BancoImobiliaria
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("BancoImobiliaria");
            EntityManager em = emf.createEntityManager();

            //a procura só será feita se existir um código digitado
            if(!txt_venda_cod.getText().equals(""))
            {
                //procura a venda com o código digitado
                Vendas venda = em.find(Vendas.class, Integer.parseInt(txt_venda_cod.getText()));

                //verifica se a venda existe
                if(venda == null) {
                    JOptionPane.showMessageDialog(this, "Código da venda não encontrado. Entre com o código correto.");
                    txt_venda_cod.requestFocus();
                }else
                {
                    //mensagem de alerda da exclusão da venda
                    if (JOptionPane.showConfirmDialog(this,
                            "Esta operação não poderá ser desfeita.\n Deseja continuar?",
                            "Aviso",
                            JOptionPane.YES_NO_OPTION,
                            JOptionPane.WARNING_MESSAGE) == JOptionPane.NO_OPTION)
                        return;

                    //obtem uma transação
                    EntityTransaction trans = em.getTransaction();

                    //remove uma venda
                    trans.begin();
                    em.remove(venda);
                    trans.commit();

                    //encerra a transação
                    em.close();
                    emf.close();

                    limparCampos();
                }
            }
        }
    }//GEN-LAST:event_btn_venda_excluirActionPerformed

    private void btn_venda_limparActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_venda_limparActionPerformed

        limparCampos();
    }//GEN-LAST:event_btn_venda_limparActionPerformed

    private void txt_venda_codFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txt_venda_codFocusLost

        //cria gerenciador do BancoImobiliaria
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("BancoImobiliaria");
        EntityManager em = emf.createEntityManager();

        //a procura só será feita se existir um código digitado
        if(!txt_venda_cod.getText().equals(""))
        {
            //procura a venda com o código digitado
            Vendas venda = em.find(Vendas.class, Integer.parseInt(txt_venda_cod.getText()));

            //se o Objeto venda existir, mostra seus dados
            if(venda != null) {
                txt_venda_cod.setText(String.valueOf(venda.getCod()));
                txt_venda_cpf_vend.setText(String.valueOf(venda.getEmpregados().getCpf()));
                txt_venda_cpf_cli.setText(venda.getClientes().getCpf());
                txt_venda_cod_imovel.setText(String.valueOf(venda.getImoveis().getCod()));
                //cbo_venda_pagamento.setSelectedIndex(venda.getFormaPagamento())

                //encerra a trasação
                em.close();
                emf.close();
            }else {
                //limpa todos os campos exceto o cod
                txt_venda_cpf_vend.setText("");
                txt_venda_cpf_cli.setText("");
                txt_venda_cod_imovel.setText("");
                cbo_venda_pagamento.setSelectedIndex(1);
            }
        }
    }//GEN-LAST:event_txt_venda_codFocusLost

    void limparCampos()
    {
        //limpa todos os campos do Formulario_venda
        txt_venda_cod.setText("");
        txt_venda_cpf_vend.setText("");
        txt_venda_cpf_cli.setText("");
        txt_venda_cod_imovel.setText("");
        cbo_venda_pagamento.setSelectedIndex(1);

        //aponta cursor para o campo cod
        //txt_venda_cod.requestFocus();
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JToggleButton btn_venda_excluir;
    private javax.swing.JButton btn_venda_limpar;
    private javax.swing.JButton btn_venda_salvar;
    private javax.swing.JComboBox cbo_venda_pagamento;
    private javax.swing.JLabel lab_venda_cod;
    private javax.swing.JLabel lab_venda_cod_imovel;
    private javax.swing.JLabel lab_venda_cod_vendedor;
    private javax.swing.JLabel lab_venda_cpf_cli;
    private javax.swing.JLabel lab_venda_pagamento;
    private javax.swing.JTextField txt_venda_cod;
    private javax.swing.JTextField txt_venda_cod_imovel;
    private javax.swing.JTextField txt_venda_cpf_cli;
    private javax.swing.JTextField txt_venda_cpf_vend;
    // End of variables declaration//GEN-END:variables

}
